package com.yeyks.config;

import com.aliyun.openservices.ons.api.ONSFactory;
import com.aliyun.openservices.ons.api.Producer;
import com.aliyun.openservices.ons.api.PropertyKeyConst;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

import javax.annotation.PostConstruct;
import java.util.Properties;

@Data
@Slf4j
@Component
@ConditionalOnProperty(prefix = "rocket-mq",name = "accessKey")
@ConfigurationProperties(prefix = "rocket-mq")
public class RocketMqProducerConfig {

    private String accessKey;
    private String secretKey;
    private String nameSrvAddr;
    private String groupId;
    /**
     * 消息生产者，也称为消息发布者，负责生产并发送消息
     */
    private static Producer producer;

    @PostConstruct
    public void init() {
        log.info("初始化启动生产者！");
        // producer 实例配置初始化
        Properties properties = new Properties();
        // AccessKey 阿里云身份验证，在阿里云服务器管理控制台创建
        properties.setProperty(PropertyKeyConst.AccessKey, this.accessKey);
        // SecretKey 阿里云身份验证，在阿里云服务器管理控制台创建
        properties.setProperty(PropertyKeyConst.SecretKey, this.secretKey);
        //设置发送超时时间，单位毫秒
        properties.setProperty(PropertyKeyConst.SendMsgTimeoutMillis, "3000");
        // 设置 TCP 接入域名(此处以公共云生产环境为例)，设置 TCP 接入域名，进入 MQ 控制台的消费者管理页面，在左侧操作栏单击获取接入点获取
        properties.setProperty(PropertyKeyConst.NAMESRV_ADDR, this.nameSrvAddr);
        producer = ONSFactory.createProducer(properties);
        // 在发送消息前，初始化调用start方法来启动Producer，只需调用一次即可，当项目关闭时，自动shutdown
        producer.start();
        log.info("ProducerConfig start success.");
    }

    /**
     * 初始化生产者
     *
     * @return
     */
    public Producer getProducer() {
        return producer;
    }
}
